/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modele;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;


/**
 *
 * @author Nishruu
 */
public class Equipe {

    //id_equipe serial NOT NULL,
  //nom character varying(45) NOT NULL,
  //id_projet integer NOT NULL,
    private int id_equipe;
    private String nom;
    private String date_debut;
    private String date_fin;
    private Projet projet;
    private ArrayList<Etudiant> membres;

    /**
     *
     * @param id_equipe
     * @param nom
     * @param date_debut
     * @param date_fin
     * @param p
     * @param membres
     */
    public Equipe(int id_equipe, String nom, String date_debut, String date_fin, Projet p, ArrayList<Etudiant> membres) {
        this.id_equipe = id_equipe;
        this.nom = nom;
        this.date_debut = date_debut;
        this.date_fin = date_fin;
        this.projet = p;
        this.membres=membres;
    }
    /**
     *
     * @param id_equipe
     * @param nom
     * @param date_debut
     * @param date_fin
     * @param p
     */
    public Equipe(int id_equipe, String nom, String date_debut, String date_fin, Projet p) {
        this.id_equipe = id_equipe;
        this.nom = nom;
        this.date_debut = date_debut;
        this.date_fin = date_fin;
        this.projet = p;
    }

    /**
     *
     * @return
     */
    public int getId_equipe() {
        return id_equipe;
    }

    /**
     *
     * @return
     */
    public ArrayList<Etudiant> getMembres() {
        return membres;
    }

    /**
     *
     * @return
     */
    public String getNom() {
        return nom;
    }

    /**
     *
     * @return
     */
    public Projet getProjet() {
        return projet;
    }

    /**
     *
     * @return
     */
    public String getDate_debut() {
        return date_debut;
    }

    /**
     *
     * @param date_debut
     */
    public void setDate_debut(String date_debut) {
        this.date_debut = date_debut;
    }

    /**
     *
     * @return
     */
    public String getDate_fin() {
        return date_fin;
    }

    /**
     *
     * @param date_fin
     */
    public void setDate_fin(String date_fin) {
        this.date_fin = date_fin;
    }

    /**
     *
     * @param id_equipe
     */
    public void setId_equipe(int id_equipe) {
        this.id_equipe = id_equipe;
    }

    /**
     *
     * @param membres
     */
    public void setMembres(ArrayList<Etudiant> membres) {
        this.membres = membres;
    }

    /**
     *
     * @param nom
     */
    public void setNom(String nom) {
        this.nom = nom;
    }

    /**
     *
     * @param projet
     */
    public void setProjet(Projet projet) {
        this.projet = projet;
    }

    
   /** Obtenir l'equipe d'id id_equipe. Null si pas trouvé.
   *
   * @param id_equipe
   * @return
   * @throws java.sql.SQLException
   */
    public static Equipe getById(int id_equipe) throws SQLException{
        Equipe result = null;
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "SELECT * FROM equipe WHERE id_equipe= '" + id_equipe + "'";
          rs = select.executeQuery(sql);
          if (rs.next()) {
            result = new Equipe(rs.getInt("id_equipe"), rs.getString("nom"),(""+rs.getTimestamp("date_debut")).substring(0, 10), (""+rs.getTimestamp("date_fin")).substring(0, 10),Projet.getById(rs.getInt("id_projet")), getMembres(rs.getInt("id_equipe")));
          }
        } finally {
            BD.close(rs);
            BD.close(select);
            BD.close(connexion);
        }
        return result;
    }

    /**
     *
     * @param name
     * @return
     * @throws SQLException
     */
    public static ArrayList<Equipe> getByName(String name) throws SQLException{
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;
        ArrayList<Equipe> equipeList = null;
        try {
          equipeList = new ArrayList<Equipe>();
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "SELECT id_equipe FROM equipe WHERE nom LIKE '%" + name + "%'";
          rs = select.executeQuery(sql);
          while (rs.next() != false) {
                equipeList.add(Equipe.getById(rs.getInt("id_equipe")));
            }
          if (equipeList.isEmpty())
              return null;
        } finally {
            BD.close(rs);
            BD.close(select);
            BD.close(connexion);
        }
        return equipeList;
    }

   /** Obtenir les membres de l'equipe. Null si pas trouvé.
   *
    * @param id_equipe
   * @return
   * @throws java.sql.SQLException
   */
    public static ArrayList<Etudiant> getMembres(int id_equipe) throws SQLException{
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;
        ArrayList<Etudiant> etudiants = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "SELECT C.nom,C.prenom, M.id_etudiant, C.tel1, C.tel2, C.email, C.url_photo  FROM membre_equipe M, equipe E, candidat C, etudiant_session ET WHERE C.id_candidat =  ET.id_candidat AND ET.id_etudiant = M.id_etudiant AND M.id_equipe = E.id_equipe AND E.id_equipe = '" + id_equipe + "'";
          rs = select.executeQuery(sql);
          etudiants = new ArrayList<Etudiant>();
          while (rs.next() != false) {
            Etudiant e = new Etudiant(rs.getInt("id_etudiant"),rs.getString("nom"),rs.getString("prenom"),rs.getString("tel1"),rs.getString("tel2"),rs.getString("email"),rs.getString("url_photo"),Session_diplome.getById(rs.getInt("id_etudiant")), Etudiant.getIDEquipes(rs.getInt("id_etudiant")));
            etudiants.add(e);
          }
        } finally {
            BD.close(rs);
            BD.close(select);
            BD.close(connexion);
        }
        return etudiants;
    }

   /** Mettre à jour les paramètres d'une equipe.
   *
   * @return
   * @throws java.sql.SQLException
   */
    public boolean updateEquipe() throws SQLException{
        Connection connexion = null;
        Statement select = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "UPDATE equipe SET nom='"+nom+"', id_projet='"+projet.getId_projet()+"', date_debut='"+date_debut+"', date_fin='"+date_fin+"' WHERE id_equipe='"+id_equipe+"'";
          select.executeQuery(sql);
        } finally {
            BD.close(select);
            BD.close(connexion);
        }
        return true;
    }

    /** Ajouter un membre à une equipe dans la base.
   *
     * @param id_membre
     * @return
   * @throws java.sql.SQLException
   */
    public boolean addMembre(int id_membre) throws SQLException{
        Connection connexion = null;
        Statement select = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "INSERT INTO membre_equipe (id_equipe, id_etudiant) VALUES('"+id_equipe+"','"+id_membre+"')";
          select.executeQuery(sql);
          membres.add(Etudiant.getById(id_membre));
        } finally {
            BD.close(select);
            BD.close(connexion);
        }
        return true;
    }

    /** Inserer une equipe dans la base.
   *
   * @return
   * @throws java.sql.SQLException
   */
    public boolean createEquipe() throws SQLException{
        Connection connexion = null;
        Statement select = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "INSERT INTO equipe(nom, id_projet, date_debut, date_fin) VALUES('"+nom+"','"+projet.getId_projet()+"', '"+date_debut+"','"+date_fin+"')";
          select.executeQuery(sql);
          sql = "SELECT id_equipe FROM equipe ORDER BY id_equipe DESC LIMIT 1";
          ResultSet rs = select.executeQuery(sql);
          if (rs.next()) {
            id_equipe = rs.getInt("id_equipe");
          }

        } finally {
            BD.close(select);
            BD.close(connexion);
        }
        return false;
    }

     /** Supprimer une equipe de la base.
   *
   * @return
   * @throws java.sql.SQLException
   */
    public boolean suppressEquipe() throws SQLException{
        Connection connexion = null;
        Statement select = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "DELETE FROM equipe WHERE id_equipe='"+id_equipe+"'";
          select.executeQuery(sql);
        } finally {
            BD.close(select);
            BD.close(connexion);
        }
        return true;
    }

    @Override
    public boolean equals(Object equipe){
        
        return (id_equipe==((Equipe)equipe).getId_equipe()
                &&nom.equals(((Equipe)equipe).getNom())
                &&projet.equals(((Equipe)equipe).getProjet())
                &&membres.equals(((Equipe)equipe).getMembres()));
    }

}
